/*
 * @Author: TT-hzy 
 * @Date: 2024-06-29 17:33:15
 * @LastEditors: TT-hzy 
 * @LastEditTime: 2024-07-05 16:14:18
 * @Description: 
 */

import { Application, Context } from "egg";


export default (app: Application) => {
  return async function errorHandler(ctx: Context, next: () => Promise<any>) {
    try {
      await next();
      if (ctx.status === 404 && !ctx.body) {
        ctx.body = {
          msg: "not found",
          data: "404 "
        };
      }
    } catch (err: any) {
      // 记录一条错误日志
      ctx.app.emit('error', err, ctx)
      const status = err.status || 500
      // 生产环境时 500 错误的详细错误内容不返回给客户端，因为可能包含敏感信息
      var error =
        status === 500 && app.config.env === 'prod' ? 'Internal Server Error' : err.message

      // 从 error 对象上读出各个属性，设置到响应中
      ctx.body = {
        msg: 'fail',
        data: error
      }
      // 参数验证异常
      if (status === 422 && err.message === 'Validation Failed') {
        if (err.errors && Array.isArray(err.errors)) {
          error = err.errors[0].err[0] ? err.errors[0].err[0] : err.errors[0].err[1]
        }
        ctx.body = {
          msg: 'fail',
          data: error
        }
      }
      ctx.status = status


    }
  };
}
